<?php
class Check{
    /**
     * 是否为空值
     * @param string $str
     * @return boolean
     */
    public static function isEmpty($str){
        $str = trim($str);    
        return strlen($str)==0?true:false;
    }
    /**
     * 验证数字类型
     * @param string $str
     * @param string $flag
     * @return boolean
     */ 
    public static function isNum($str, $flag='int'){
        // if(self::isEmpty($str)) {
        //     return false;
        // }
        if(strtolower($flag) == 'int'){
            return ((string)(int)$str === (string)$str) ? true : false;
        }else{
            return ((string)(float)$str === (string)$str) ? true : false;
        }
    }
    /**
     * 验证简略名slug
     * @param string $str
     * @return boolean
     */ 
    public static function isSlug($str,$flag = 'float'){
        if(self::isEmpty($str)) {
            return false;
        }
        $exp = '/^[A-Za-z0-9_]{1,80}$/';
        $str = trim($str);
        return preg_match($exp, $str) ? true : false;
    } 

    /**
     * 文字介绍防止sql注入
     * @param string $value
     * @return string
     */
    public static function checkPost($value) {
        if(PHP_VERSION >= 6 || !get_magic_quotes_gpc()) {
            $value = addslashes($value);
        }
        $value = str_replace("_", "\_", $value);
        $value = str_replace("%", "\%", $value);
        // $value = preg_replace("/\s+\n/is", "\n", $value);
        $value = htmlspecialchars($value);
        $value = nl2br($value);
        return $value;
    }

    /**
     * 邮箱验证
     * @param string $str
     * @return boolean
     */ 
    public static function isEmail($str){
        if(self::isEmpty($str)) {
            return false;
        }
        $exp = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/";
        return preg_match($exp, $str) ? true : false;
    }
    /**
     * 手机号码验证
     * @param string $str
     * @return boolean
     */ 
    public static function isMobile($str){
        if(self::isEmpty($str)) {
            return false;
        }
        $exp = "/^1[3|4|5|7|8][0-9]{9}$/";
        return preg_match($exp, $str) ? true : false;
    }
    /**
     * URL验证，纯网址格式，不支持IP验证
     * @param string $str
     * @return boolean
     */      
    public static function isUrl($str){
        if(self::isEmpty($str)) {
            return false;
        }
        return preg_match('#(http|https|ftp|ftps)://([w-]+.)+[w-]+(/[w-./?%&=]*)?#i',$str) ? true : false;
    }
    /**
     * 验证长度
     * @param string $str
     * @param int $type(方式，默认min <= $str <= max)
     * @param int $min,最小值;$max,最大值;
     * @param string $charset 字符
    */
    public static function length($str,$type=3,$min=0,$max=0,$charset = 'utf-8'){
        if(self::isEmpty($str)) {
            return false;
        }
        $len = mb_strlen($str,$charset);
        switch($type){
            case 1: //只匹配最小值
                return ($len >= $min) ? true : false;
                break;
            case 2: //只匹配最大值
                return ($max >= $len) ? true : false;
                break;
            default: //min <= $str <= max
                return (($min <= $len) && ($len <= $max)) ? true : false;
        }
    }
    /**
     * 验证密码
     * @param string $value
     * @param int $minLen
     * @param int $maxLen
     * @return boolean
     */
    public static function isPassword($str, $minLen=6, $maxLen=80){
        if(self::isEmpty($str)) {
            return false;
        }
        $exp = '/^[A-Za-z0-9_]{'.$minLen.','.$maxLen.'}$/';
        $str = trim($str);
        return preg_match($exp, $str) ? true : false;
    } 
    /**
     * 验证用户名
     * @param string $value
     * @param int $minLen
     * @param int $maxLen
     * @param string $charset
     * @return boolean
     */
    public static function isName($value, $minLen=1, $maxLen=80, $charset='ALL'){
        if(empty($value)) {
            return false;
        }
        switch($charset){
            case 'EN': $match = '/^[_\w\d]{'.$minLen.','.$maxLen.'}$/iu';
                break;
            case 'CN':$match = '/^[_\x{4e00}-\x{9fa5}\d]{'.$minLen.','.$maxLen.'}$/iu';
                break;
            default: $match = '/^[_\w\d\x{4e00}-\x{9fa5}]{'.$minLen.','.$maxLen.'}$/iu';
        }
        return preg_match($match, $value) ? true : false;
    }

    /**
     * 过滤字符串，防止注入
     * @param string $data
     * @return string
     */
    public static function escapeData($data) {
        return addslashes(strip_tags(trim($data)));
    }

    /**
     * 检测提交数据是不是含有SQL注射的字符防止注射
     * @param string $sql_str
     * @return string
     */
    function injectCheck($sql_str) {
        return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);
    }
}

